package com.dmgis.hndz.service.impl;


import com.dmgis.hndz.common.utils.StringUtil;
import com.dmgis.hndz.common.utils.SysResult;
import com.dmgis.hndz.mapper.Ggsy02aMapper;
import com.dmgis.hndz.mapper.Ggsy02bMapper;
import com.dmgis.hndz.pojo.Ggsy02a;
import com.dmgis.hndz.pojo.Ggsy02b;
import com.dmgis.hndz.pojoVo.Ggsy02bVO;
import com.dmgis.hndz.service.Ggsy02bService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;

/**
 * 通讯录人员表(Ggsy02b)表服务实现类
 *
 * @author makejava
 * @since 2024-07-26 13:40:08
 */
@Service
@Slf4j
public class Ggsy02bServiceImpl implements Ggsy02bService {


    @Resource
    private Ggsy02bMapper ggsy02bMapper;

    @Resource
    private Ggsy02aMapper ggsy02aMapper;

    /**
     * 查询通讯录人员表列表
     */
    @Override
    public List<Ggsy02bVO> selectGgsy02bList(Ggsy02bVO ggsy02bVO) {
        if (ggsy02bVO != null) {
            // 行政编码
            String code = ggsy02bVO.getGgsy02a090();
            // 判断市级县级
            if (!StringUtil.IsNullOrEmpty(code)) {
                if (code.endsWith("0000")) {
                    code = "";
                } else if (code.endsWith("00")) {
                    code = code.substring(0, 4);
                }
                ggsy02bVO.setGgsy02a090(code);
            }
        }

        List<Ggsy02bVO> ggsy02bVOList = ggsy02bMapper.selectGgsy02bList(ggsy02bVO);
        ggsy02bVOList = ggsy02bVOList.stream()
                .filter(g -> g.getGgsy02b010() != null && g.getGgsy02b015() != null)
                .collect(Collectors.toList());
        ggsy02bVOList.stream().forEach(g -> {
            g.setPersonId(g.getGgsy02b010().toString());
            g.setStrId(g.getGgsy02b015().toString());
        });
        return ggsy02bVOList;
    }

    /**
     * 通过id单个查询通讯录人员表
     */
    @Override
    public Ggsy02b selectGgsy02bOneById(Long ggsy02b010) {
        return ggsy02bMapper.selectGgsy02bOneById(ggsy02b010);
    }

    /**
     * 单个条件查询通讯录人员表列表
     */
    @Override
    public Ggsy02b selectGgsy02bOne(Ggsy02b ggsy02b) {
        return ggsy02bMapper.selectGgsy02bOne(ggsy02b);
    }

    /**
     * 新增通讯录人员表
     */
    @Override
    public SysResult insertGgsy02b(Ggsy02b ggsy02b) {
        Ggsy02a ggsy02a = ggsy02aMapper.selectById(ggsy02b.getGgsy02b015());
        if (Objects.isNull(ggsy02a)) {
            return SysResult.fail("未找到对应部门，新增通讯录人员失败！");
        }

        int flag = ggsy02bMapper.insertGgsy02b(ggsy02b);

        if (flag > 0) {
            return SysResult.success("新增通讯录人员成功");
        } else {
            return SysResult.fail("新增通讯录人员失败!");
        }
    }

    /**
     * 修改通讯录人员表
     */
    @Override
    public int updateGgsy02b(Ggsy02b ggsy02b) {
        return ggsy02bMapper.updateGgsy02b(ggsy02b);
    }

    /**
     * count通讯录人员表列表
     */
    @Override
    public Long selectGgsy02bCount(Ggsy02b ggsy02b) {
        return ggsy02bMapper.selectGgsy02bCount(ggsy02b);
    }


    /**
     * 通过id单个删除通讯录人员表
     */
    @Override
    public int deleteGgsy02bOneById(Long ggsy02b010) {
        return ggsy02bMapper.deleteGgsy02bById(ggsy02b010);
    }

    /**
     * 通过id批量删除通讯录人员表
     */
    @Override
    public int batchRemoveGgsy02b(List<Long> ggsy02b010s) {
        return ggsy02bMapper.batchRemoveGgsy02b(ggsy02b010s);
    }

    /**
     * Excel导入数据
     * 主要思路：1.判断写入手机号码是否符合要求
     * 2.查询部门名称对应的部门id
     * 3.查看此信息是否已存在
     * 4.存入数据
     *
     * @param ggsy02bVOList Excel导入数据
     * @return 返回成功与失败的日志请求
     */
    @Override
    public String importData(List<Ggsy02bVO> ggsy02bVOList) {
        StringBuilder successStr = new StringBuilder("已成功导入：");
        AtomicInteger successFlag = new AtomicInteger(1);
        StringBuilder failStr = new StringBuilder("导入失败：");
        AtomicInteger failFlag = new AtomicInteger(1);

        ggsy02bVOList.stream().forEach(g -> {
//            判断是否符合手机号格式
            if (StringUtil.isValidPhoneNumber(g.getGgsy02b080())) {
//                根据单位名称获取单位id
                Long ggsy02a010 = ggsy02aMapper.selectGgsy02a010ByGgsy02a020(g.getGgsy02a020());

                if (Objects.isNull(ggsy02a010)) {
                    failStr.append("   " + failFlag + ".姓名：" + g.getGgsy02b020()
                            + "  部门名称异常，部门名称未收录系统，异常的部门名称为：" + g.getGgsy02a020());
                    log.error("导入数据工作单位名称异常，姓名：{}，异常工作单位名称：{}", g.getGgsy02b020(), g.getGgsy02b020());
                    failFlag.getAndIncrement();

                } else {
//                    传入部门id
                    g.setGgsy02b015(ggsy02a010);
//                    存入联系人信息
                    Ggsy02b ggsy02b = new Ggsy02b();
                    BeanUtils.copyProperties(g, ggsy02b);
//                    查看此用户是否存在
                    Long aLong = ggsy02bMapper.selectGgsy02bCount(ggsy02b);
                    if (aLong > 0) {
                        failStr.append("   " + failFlag + ".工作单位：" + g.getGgsy02a020()
                                + "  姓名：" + g.getGgsy02b020()
                                + "  手机号为：" + g.getGgsy02b080()
                                + "  用户数据已存在！！！");
                        log.error("导入用户数据已存在，工作单位：{}，姓名：{}，手机号：{}", g.getGgsy02a020(), g.getGgsy02b020(), g.getGgsy02b080());
                        failFlag.getAndIncrement();
                    } else {
//                        导入数据
                        int flag = ggsy02bMapper.insertGgsy02b(ggsy02b);
                        if (flag > 0) {
                            successStr.append("   " + successFlag + ".工作单位：" + g.getGgsy02a020()
                                    + "  姓名：" + g.getGgsy02b020()
                                    + "  手机号为：" + g.getGgsy02b080()
                                    + "  添加成功！！！");
                            log.info("导入数据成功，工作单位：{}，姓名：{}，手机号：{}", g.getGgsy02a020(), g.getGgsy02b020(), g.getGgsy02b080());
                            successFlag.getAndIncrement();
                        } else {
                            failStr.append("   " + failFlag + ".工作单位：" + g.getGgsy02a020()
                                    + "  姓名：" + g.getGgsy02b020()
                                    + "  手机号为：" + g.getGgsy02b080()
                                    + "  数据导入异常！！！");
                            log.error("导入数据异常，工作单位：{}，姓名：{}，手机号：{}", g.getGgsy02a020(), g.getGgsy02b020(), g.getGgsy02b080());
                            failFlag.getAndIncrement();
                        }
                    }

                }

            } else {
                failStr.append("   " + failFlag + ".工作单位：" + g.getGgsy02a020()
                        + "  姓名：" + g.getGgsy02b020()
                        + "  手机号异常，异常的手机号为：" + g.getGgsy02b080());
                log.error("导入数据手机号异常，工作单位：{}，姓名：{}，异常手机号：{}", g.getGgsy02a020(), g.getGgsy02b020(), g.getGgsy02b080());
                failFlag.getAndIncrement();
            }
        });

        String ret = "";

        if (successFlag.get() > 1) {
            ret += successStr;
        }
        if (failFlag.get() > 1) {
            ret += failStr;
        }

        return ret;
    }

}


